const { exec } = require('node:child_process')
const util = require('node:util')
// exec('node -v', (err, stdout, stderr) => {
//     if (err) return
//     console.log(stdout, stderr)
// })
// const execPromise = util.promisify(exec)  // 将原本的回调函数改造并返回一个新的 promise 函数
// 如果返回多个参数 res 是个对象 如果返回一个 就直接返回
// execPromise('node -v').then(res => {
//     // { stdout: 'v18.12.1\r\n', stderr: '' }
//     console.log('res', res)
// }).catch(e => {
//     console.log('eee', e)
// })

// node源码通过 kCustomPromisifyArgeSymbol 拿到唯一的 key
//  // 手写 promisify
// const promisify = (fn) => {
//     return (...rest) => {
//         return new Promise((resolve, reject) => {
//             fn(...rest, (err, ...args) => {
//                 if (err) reject(err)
//                 resolve(args)
//             })
//         })
//     }
// }
// const execPromise1 = promisify(exec)
// execPromise1('node -v').then(res => {
//     // { stdout: 'v18.12.1\r\n', stderr: '' }
//     console.log('res', res)
// }).catch(e => {
//     console.log('eee', e)
// })

const fn = (type, ...rest) => {
    if (type === 1) {
        console.log('cass', rest)
        if (rest.length > 1) return Promise.resolve({ 'success': 'success', ...rest })
        return Promise.resolve({ '成功': '成功', ...rest })

    } else {
        return Promise.reject('fail')
    }
}
// const callback = util.callbackify(fn)
// callback(2, ((err, data) => {
//     if (err) return console.log(err)
//     console.log(data)
// }))
// const callbackify = (fn) => {
//     return (...rest) => {
//         const callback = rest.pop()
//         fn(...rest).then(res => {
//             callback(undefined, res)
//         }).catch(e => {
//             callback(e)
//         })
//     }
// }
// const callback = callbackify(fn)
// callback(1, 2, 3, ((err, data) => {
//     if (err) return console.log(err)
//     console.log(data)
// }))

// %s 匹配后面的每一个string参数
// %d 匹配后面的每一个number参数
// https://nodejs.p2hp.com/api/v19/util/#utilformatformat-args
console.log(util.format('%s---%s||%s', 'psd', 'wps', 'csac'))  // psd---wps||csac